1. Field of the Invention
This invention relates to computer networks, and more particularly to resource naming in networked environments.
2. Description of the Related Art
The Internet has three valuable fundamental assets—information, bandwidth, and computing resources—all of which are vastly underutilized, partly due to the traditional client-server computing model. No single search engine or portal can locate and catalog the ever-increasing amount of information on the Web in a timely way. Moreover, a huge amount of information is transient and not subject to capture by techniques such as Web crawling. For example, research has estimated that the world produces two exabytes or about 2×1018 bytes of information every year, but only publishes about 300 terabytes or about 3×1012 bytes. In other words, for every megabyte of information produced, only one byte is published. Moreover, Google claims that it searches about only 1.3×10^8 web pages. Thus, finding useful information in real time is increasingly difficult.
Although miles of new fiber have been installed, the new bandwidth gets little use if everyone goes to one site for content and to another site for auctions. Instead, hot spots just get hotter while cold pipes remain cold. This is partly why most people still feel the congestion over the Internet while a single fiber's bandwidth has increased by a factor of 10^6 since 1975, doubling every 16 months.
New processors and storage devices continue to break records in speed and capacity, supporting more powerful end devices throughout the network. However, computation continues to accumulate around data centers, which have to increase their workloads at a crippling pace, thus putting immense pressure on space and power consumption.
Finally, computer users in general are accustomed to computer systems that are deterministic and synchronous in nature, and think of such a structure as the norm. For example, when a browser issues a URL (Uniform Resource Locator) request for a Web page, the output is typically expected to appear shortly afterwards. It is also typically expected that everyone around the world will be able to retrieve the same page from the same Web server using the same URL.
The term peer-to-peer networking or computing (often referred to as P2P) may be applied to a wide range of technologies that greatly increase the utilization of information, bandwidth, and computing resources in the Internet. Frequently, these P2P technologies adopt a network-based computing style that neither excludes nor inherently depends on centralized control points. Apart from improving the performance of information discovery, content delivery, and information processing, such a style also can enhance the overall reliability and fault-tolerance of computing systems.
FIGS. 1A and 1B are examples illustrating the peer-to-peer model. FIG. 1A shows two peer devices 104A and 104B that are currently connected. Either of the two peer devices 104 may serve as a client of or a server to the other device. FIG. 1B shows several peer devices 104 connected over the network 106 in a peer group. In the peer group, any of the peer devices 104 may serve as a client of or a server to any of the other devices.
Resources (including processes) in a networked environment may require unique names (identifiers) by which they can be identified in the environment. For example, in a peer-to-peer environment, every peer may be given an identifier. As another example, in a chat session, every participant needs an identifier. Existing resource naming mechanisms are either centralized or do not guarantee the uniqueness of identifiers across several resources on the same machine. For example, some networked environments may use a central naming server that provides identifiers and ensures the identifiers do not clash. One problem with a central naming server is that the server is a single point of failure; if the server becomes unavailable, new resources cannot be assigned identifiers. Some mechanisms may provide distributed naming of resources in networked environments (e.g. UUIDs (Universal Unique Identifiers), GUIDs (Global Unique Identifiers), etc.). These mechanisms may require no central server. These mechanisms typically use random number generators to ensure a degree of randomness (and thus a degree of uniqueness) in the naming of resources. Using random number generators, it is possible for identifier clashes to occur. Thus, naming mechanisms which rely on generated random numbers to provide unique identifiers may not be able to guarantee uniqueness of identifiers over time and across the networked environment. Further, there may be multiple processes (e.g. peers) running on a machine, so a process may have to wait its turn for a random number generator on the machine to generate a random number. Therefore, naming mechanisms that rely on random number generators may not scale well.
Therefore, it is desirable to provide a mechanism for the decentralized, unique naming of resources in networked environments that generates identifiers for network resources that are unique over time and across the networked environment.